package com.zhaungjie.base.utils;

import com.zhaungjie.base.utils.LambdaStructureParser.LambdaStructureParser;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 枚举值合法性有效性验证器
 *
 * @author zhuangjie
 * @date 2024/03/10
 */
public class EnumValidator {
    /**
     * 通用枚举值有效性验证工具方法
     *
     * @param value 要检验的值
     * @param enumClass 枚举类类型
     * @param fun 要使用的比较方法引用
     * @return boolean
     * @throws NoSuchMethodException
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     */
    public static <E extends Enum<E>> boolean isValid(Object value, Class<E> enumClass, LambdaStructureParser.NANRFunction<E> fun) {
        E[] consts = enumClass.getEnumConstants();
        // 在最外面捕获，好处是异常了，循环会终止
        try {
            if(consts != null) {
                Method method = LambdaStructureParser.convertToMethod(fun);
                for(E constant : consts) {
                    Object compareValue = method.invoke(constant);
                    if(compareValue.equals(value)) {
                        return true;
                    }
                }
            }
        }catch (Exception e) {}
        return false;
    }

//    /**
//     * 使用
//     */
//    public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
//        boolean result = EnumValidator.isValid("4", BusinessTypeEnum.class, BusinessTypeEnum::getValue);
//    }

}
